package com.bw.gmall.api.service;

import com.bw.gmall.api.model.*;
import com.bw.gmall.api.repository.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class StatsService {
/*
* StatsService：统计服务类，整合各 Repository 的方法，
* 提供统一的统计数据查询接口，供控制器调用。
* 包含获取流量、商品、关键词、来源、页面、用户画像等统计数据的方法。
* */
    @Autowired
    private TrafficStatsRepository trafficStatsRepository;

    @Autowired
    private GoodsTrafficStatsRepository goodsTrafficStatsRepository;

    @Autowired
    private KeywordStatsRepository keywordStatsRepository;
    
    @Autowired
    private TrafficSourceStatsRepository trafficSourceStatsRepository;
    
    @Autowired
    private PageTrafficStatsRepository pageTrafficStatsRepository;
    
    @Autowired
    private UserProfileStatsRepository userProfileStatsRepository;

    public List<TrafficStats> getTrafficStats() {
        return trafficStatsRepository.findAll();
    }

    public List<TrafficStats> getTrafficStatsByTimeRange(String startTime, String endTime) {
        return trafficStatsRepository.findByTimeRange(startTime, endTime);
    }

    public List<GoodsTrafficStats> getGoodsTrafficTopN(int limit) {
        return goodsTrafficStatsRepository.findTopN(limit);
    }

    public List<GoodsTrafficStats> getGoodsTrafficByTimeRange(String startTime, String endTime) {
        return goodsTrafficStatsRepository.findByTimeRange(startTime, endTime);
    }

    public List<KeywordStats> getKeywordTopN(int limit) {
        return keywordStatsRepository.findTopN(limit);
    }

    public List<KeywordStats> getKeywordByTimeRange(String startTime, String endTime) {
        return keywordStatsRepository.findByTimeRange(startTime, endTime);
    }
    
    public List<TrafficSourceStats> getTrafficSourceTopN(int limit) {
        return trafficSourceStatsRepository.findTopN(limit);
    }
    
    public List<TrafficSourceStats> getTrafficSourceByTimeRange(String startTime, String endTime) {
        return trafficSourceStatsRepository.findByTimeRange(startTime, endTime);
    }
    
    public List<PageTrafficStats> getPageTrafficTopN(int limit) {
        return pageTrafficStatsRepository.findTopN(limit);
    }
    
    public List<PageTrafficStats> getPageTrafficByTimeRange(String startTime, String endTime) {
        return pageTrafficStatsRepository.findByTimeRange(startTime, endTime);
    }
    
    public List<UserProfileStats> getUserProfileStats() {
        return userProfileStatsRepository.findAll();
    }
    
    public List<UserProfileStats> getUserProfileStatsByTimeRange(String startTime, String endTime) {
        return userProfileStatsRepository.findByTimeRange(startTime, endTime);
    }
}